package com.xyoto.community.service;

import com.xyoto.community.dto.*;
import com.xyoto.community.po.TotalDynamicListPO;
import com.xyoto.community.utils.Result;
import com.xyoto.community.vo.DynamicCommentsVo;
import com.xyoto.community.vo.DynamicDetailVo;
import com.xyoto.community.vo.TotalDynamicListVo;

import java.util.List;

/**
 * ClassName:   新增动态Service接口
 * Author:      挽风
 * Date:        2020
 * Copyright:   2020 by 挽风1.0版本
 * Description:
 **/
public interface DynamicService {

    /**
     * 新增动态Web接口
     *
     * @param saveDynamicDTO 动态表单DTO
     *
     * @return 操作状态
     */
    Result saveDynamic(SaveDynamicDTO saveDynamicDTO);

    /**
     * 修改动态Web接口
     *
     * @param updateDynamicDTO 修改后的动态表单DTO
     *
     * @return 修改状态
     */
    Result updateDynamic(UpdateDynamicDTO updateDynamicDTO);

    /**
     * 新增动态评论回复
     * @param saveDynamicCommentReplyDTO
     * @return
     */
    Result saveDynamicCommentReply(SaveDynamicCommentReplyDTO saveDynamicCommentReplyDTO);

    /**
     * 新增动态点赞
     * @param saveDynamicLoveDTO
     * @return
     */
    Result saveDynamicLove(SaveDynamicLoveDTO saveDynamicLoveDTO);

    /**
     * 根据动态id删除动态
     * @param dynamicId 动态id
     * @return
     */
    Result removeDynamicById(Integer dynamicId);

    /**
     * 根据动态评论id删除动态评论
     * @param dynamicCommentId 动态评论id
     * @return
     */
    Result removeDynamicCommentByDynamicCommentId(Integer dynamicCommentId);

    /**
     * 根据动态评论回复id删除动态评论回复
     * @param dynamicCommentReplyId 回复id
     * @return
     */
    Result removeDynamicCommentReply(Integer dynamicCommentReplyId);

    /**
     * 新增动态评论点赞
     * @param saveDynamicCommentLoveDTO
     * @return
     */
    Result saveDynamicCommentLove(SaveDynamicCommentLoveDTO saveDynamicCommentLoveDTO);

    /**
     * 取消动态点赞
     * @param dynamicId 动态id
     * @return
     */
    Result removeDynamicLoveByDynamicId(Integer dynamicId);

    /**
     * 取消动态评论点赞
     * @param dynamicCommentId 动态评论id
     * @return
     */
    Result removeDynamicCommentLoveByDynamicCommentId(Integer dynamicCommentId);

    /**
     * 新增动态评论回复点赞
     * @param saveDynamicCommentReplyLoveDTO
     * @return
     */
    Result saveDynamicCommentReplyLove(SaveDynamicCommentReplyLoveDTO saveDynamicCommentReplyLoveDTO);

    /**
     * 分页查询全部动态列表，按照时间倒序
     * @param pageDTO  分页参数
     * @return  动态列表数据
     */
    Result getTotalDynamicList(PageDTO pageDTO);

    /**
     * 取消动态评论回复点赞
     * @param dynamicCommentReplyId 动态评论回复id
     * @return
     */
    Result removeDynamicCommentReplyLove(Integer dynamicCommentReplyId);

    /**
     * 获取动态详情
     * @param dynamicId 动态id
     * @return
     */
    Result<DynamicDetailVo> getDynamicByDynamicId(Integer dynamicId);

    /**
     * 根据动态id获取 动态评论数+动态下的回复数
     * @author 廖振辉
     * @param dynamicId
     * @return {@link Integer}
     */
    Integer countDynamicCommentAndReply(Integer dynamicId);

    /**
     * 新增动态评论Web接口
     *
     * @param saveDynamicCommentDTO 动态评论表单DTO
     *
     * @return 操作状态
     */
    Result saveDynamicComment(SaveDynamicCommentDTO saveDynamicCommentDTO);

    /**
     * 分页查询热门动态列表，按照热度进行排序
     * @param pageDTO 分页参数
     * @return 热门动态列表
     */
    Result getHotDynamicList(PageDTO pageDTO);

    /**
     * pageDTO
     * @param dynamicId
     * @param pageDTO
     * @return
     */
    Result<List<DynamicCommentsVo>> getDynamicCommentList(Integer dynamicId, PageDTO pageDTO);

    /**
     * 根据动态简单信息进行处理动态信息
     * @param totalDynamicListPo 动态信息
     * @return
     */
    List<TotalDynamicListVo> getDynamicVoList(List<TotalDynamicListPO> totalDynamicListPo, PageDTO pageDTO);

    /**
     * 根据动态id，将动态设置为私密
     * @param dynamicId
     * @return
     */
    Result markDynamicAsPersonal(Integer dynamicId);

    /**
     * 根据条件查询动态信息
     * @param dynamicSearchConditionDTO
     * @return
     */
    Result getDynamicListByCondition(PageDTO pageDTO,DynamicSearchConditionDTO dynamicSearchConditionDTO);

    /**
     * 获取评论回复列表
     * @author 廖振辉
     * @param listCommentReplyDTO
     * @return {@link Result}
     */
    Result listCommentReplyByCommentId(ListCommentReplyDTO listCommentReplyDTO);
}
